洛谷 P1598 垂直柱状图

洛谷 P1598 垂直柱状图

链接

https://www.luogu.org/problemnew/show/P1598

题目

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入输出格式

输入格式:

四行字符,由大写字母组成,每行不超过100个字符

输出格式:

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

输入输出样例

输入样例#1:

  THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
  THIS IS AN EXAMPLE TO TEST FOR YOUR
  HISTOGRAM PROGRAM.
  HELLO!

输出样例#1:

                              *
                              *
          *                   *
          *                   *     *   *
          *                   *     *   *
  *       *     *             *     *   *
  *       *     * *     * *   *     * * *
  *       *   * * *     * *   * *   * * * *
  *     * * * * * *     * * * * *   * * * *     * *
  * * * * * * * * * * * * * * * * * * * * * * * * * *
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

说明

每行输出后面不允许出现多余的空格。

思路

思路清晰,读取四行数据,检索出现次数,通过数组保存一气呵成,我这里读取输入用的是getline,我觉得会好一点。

(但是这题我debug了半天,最后才发现我少空格。。。。。。)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

int word[27];

int main()
{
int max=0;
char a[105];
for(int i=0;i<4;i++)
{
cin.getline(a,105);
int n=strlen(a);
for(int j=0;j<n;j++)
{
if(a[j]>='A'&&a[j]<='Z')
word[a[j]-'A']++;
}
}
for(int i=0;i<26;i++)
if(word[i]>max)
max=word[i];
for(int i=max;i>=1;i--)
{
for(int j=0;j<26;j++)
{
if(word[j]>=i)
cout<<"* ";
else
cout<<" ";
}
cout<<endl;
}
for(int i=0;i<26;i++)
cout<<(char)('A'+i)<<" ";
return 0;
}
---本文结束,感谢阅读---